package strings

import "math"

/**
7. 整数反转

给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ，就返回 0。
假设环境不允许存储 64 位整数（有符号或无符号）。

示例 1：
输入：x = 123
输出：321

示例 2：
输入：x = -123
输出：-321

示例 3：
输入：x = 120
输出：21

示例 4：
输入：x = 0
输出：0

提示：
-2^31 <= x <= 2^31 - 1
*/

func reverse(x int) int {
	// 初始化整数反转结果
	ans := 0
	// 当x不为0时，执行循环逻辑
	for x != 0 {
		// 如果反转后的数值满足下面if的任意一个条件，则属于异常情况
		if ans < math.MinInt32/10 || ans > math.MaxInt32/10 {
			return 0
		}
		// 获取整数x最后一位的值
		pop := x % 10
		// 将x除以10，舍掉最后一位
		x = x / 10
		// 计算反转结果
		ans = ans*10 + pop
	}
	return ans
}
